package com.gs.netty.support.codec;

import com.alibaba.fastjson2.JSON;
import com.gs.netty.websocket.remoting.WebSocketInvocation;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToMessageDecoder;
import io.netty.handler.codec.http.websocketx.*;

import java.nio.charset.StandardCharsets;
import java.util.List;

/**
 *
 *  1.版本号 （1个字节）
 *  2.消息类型 0=请求，1=响应
 *  3.请求序号 （4个字节）
 *  4.指令长度  （4个字节，如果是响应（））
 *  5.指令正文  （N个字节）
 *  6.消息正文
 * WebSocket 消息内容解码器
 */
public class WebSocketAcceptMessageProtocolDecoder extends MessageToMessageDecoder<TextWebSocketFrame> {

    /**
     * TODO 看看怎么实现数据流式输出
     * @param ctx           the {@link ChannelHandlerContext} which this {@link MessageToMessageDecoder} belongs to
     * @param msg           the message to decode to an other one
     * @param out           the {@link List} to which decoded messages should be added
     * @throws Exception
     */
    @Override
    protected void decode(ChannelHandlerContext ctx, TextWebSocketFrame msg, List<Object> out) throws Exception {
        String date = msg.text();
        WebSocketInvocation webSocketInvocation = JSON.parseObject(date, WebSocketInvocation.class);
        out.add(webSocketInvocation);

    }
}
